home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue38 / Alfresco / Project1.dpr < prev   
Text File  |  1998-09-01  |  5KB  |  184 lines

  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils,
  7.   Graphs in 'Graphs.pas';
  8.  
  9. procedure PreProcess(aSender : TObject; aNodeInx : integer);
  10. begin
  11.   writeln('PreProcessing node ', aNodeInx);
  12. end;
  13.  
  14. procedure PostProcess(aSender : TObject; aNodeInx : integer);
  15. begin
  16.   writeln('PostProcessing node ', aNodeInx);
  17. end;
  18.  
  19. const
  20.   EdgeExists = pointer(1);
  21.  
  22. var
  23.   FMGraph : TaaFullMatrixGraph;
  24.   TMGraph : TaaTriMatrixGraph;
  25.   LLGraph : TaaLinkListGraph;
  26.   Iter    : TaaDepthFirstIterator;
  27.   i, j    : integer;
  28.   Edge    : pointer;
  29.   ToInx   : integer;
  30.  
  31. begin
  32.   try
  33.     FMGraph := TaaFullMatrixGraph.Create(10, false);
  34.     try
  35.       with FMGraph do begin
  36.         Edges[0, 6] := EdgeExists;
  37.         Edges[0, 9] := EdgeExists;
  38.         Edges[9, 8] := EdgeExists;
  39.         Edges[7, 8] := EdgeExists;
  40.         Edges[5, 6] := EdgeExists;
  41.         Edges[5, 4] := EdgeExists;
  42.         Edges[5, 3] := EdgeExists;
  43.         Edges[5, 8] := EdgeExists;
  44.         Edges[5, 7] := EdgeExists;
  45.         Edges[2, 1] := EdgeExists;
  46.         Edges[2, 3] := EdgeExists;
  47.         Edges[2, 4] := EdgeExists;
  48.         Edges[1, 3] := EdgeExists;
  49.         writeln('---full matrix graph');
  50.         writeln('   0 1 2 3 4 5 6 7 8 9');
  51.         for i := 0 to 9 do begin
  52.           write(i:2);
  53.           for j := 0 to 9 do begin
  54.             if Edges[i, j] <> nil then
  55.               write(' 1')
  56.             else
  57.               write(' .');
  58.           end;
  59.           write('   ');
  60.           j := 0;
  61.           while GetNodeEdge(i, j, Edge, ToInx) do begin
  62.             write(ToInx:2);
  63.             inc(j);
  64.           end;
  65.           writeln;
  66.         end;
  67.       end;
  68.  
  69.       Iter := TaaDepthFirstIterator.Create(FMGraph);
  70.       try
  71.         Iter.OnPreProcess := PreProcess;
  72.         Iter.OnPostProcess := PostProcess;
  73.         Iter.Execute(0);
  74.       finally
  75.         Iter.Free;
  76.       end;
  77.     finally
  78.       FMGraph.Free;
  79.     end;
  80.     readln;
  81.     //
  82.     TMGraph := TaaTriMatrixGraph.Create(10);
  83.     try
  84.       with TMGraph do begin
  85.         Edges[0, 6] := EdgeExists;
  86.         Edges[0, 9] := EdgeExists;
  87.         Edges[9, 8] := EdgeExists;
  88.         Edges[7, 8] := EdgeExists;
  89.         Edges[5, 6] := EdgeExists;
  90.         Edges[5, 4] := EdgeExists;
  91.         Edges[5, 3] := EdgeExists;
  92.         Edges[5, 8] := EdgeExists;
  93.         Edges[5, 7] := EdgeExists;
  94.         Edges[2, 1] := EdgeExists;
  95.         Edges[2, 3] := EdgeExists;
  96.         Edges[2, 4] := EdgeExists;
  97.         Edges[1, 3] := EdgeExists;
  98.         writeln('---triangular matrix graph');
  99.         writeln('   0 1 2 3 4 5 6 7 8 9');
  100.         for i := 0 to 9 do begin
  101.           write(i:2);
  102.           for j := 0 to 9 do begin
  103.             if Edges[i, j] <> nil then
  104.               write(' 1')
  105.             else
  106.               write(' .');
  107.           end;
  108.           write('   ');
  109.           j := 0;
  110.           while GetNodeEdge(i, j, Edge, ToInx) do begin
  111.             write(ToInx:2);
  112.             inc(j);
  113.           end;
  114.           writeln;
  115.         end;
  116.       end;
  117.  
  118.       Iter := TaaDepthFirstIterator.Create(TMGraph);
  119.       try
  120.         Iter.OnPreProcess := PreProcess;
  121.         Iter.OnPostProcess := PostProcess;
  122.         Iter.Execute(0);
  123.       finally
  124.         Iter.Free;
  125.       end;
  126.     finally
  127.       TMGraph.Free;
  128.     end;
  129.     readln;
  130.     //
  131.     LLGraph := TaaLinkListGraph.Create(10, false);
  132.     try
  133.       with LLGraph do begin
  134.         Edges[0, 6] := EdgeExists;
  135.         Edges[0, 9] := EdgeExists;
  136.         Edges[9, 8] := EdgeExists;
  137.         Edges[7, 8] := EdgeExists;
  138.         Edges[5, 6] := EdgeExists;
  139.         Edges[5, 4] := EdgeExists;
  140.         Edges[5, 3] := EdgeExists;
  141.         Edges[5, 8] := EdgeExists;
  142.         Edges[5, 7] := EdgeExists;
  143.         Edges[2, 1] := EdgeExists;
  144.         Edges[2, 3] := EdgeExists;
  145.         Edges[2, 4] := EdgeExists;
  146.         Edges[1, 3] := EdgeExists;
  147.         writeln('---linked list graph');
  148.         writeln('   0 1 2 3 4 5 6 7 8 9');
  149.         for i := 0 to 9 do begin
  150.           write(i:2);
  151.           for j := 0 to 9 do begin
  152.             if Edges[i, j] <> nil then
  153.               write(' 1')
  154.             else
  155.               write(' .');
  156.           end;
  157.           write('   ');
  158.           j := 0;
  159.           while GetNodeEdge(i, j, Edge, ToInx) do begin
  160.             write(ToInx:2);
  161.             inc(j);
  162.           end;
  163.           writeln;
  164.         end;
  165.       end;
  166.  
  167.       Iter := TaaDepthFirstIterator.Create(LLGraph);
  168.       try
  169.         Iter.OnPreProcess := PreProcess;
  170.         Iter.OnPostProcess := PostProcess;
  171.         Iter.Execute(0);
  172.       finally
  173.         Iter.Free;
  174.       end;
  175.     finally
  176.       LLGraph.Free;
  177.     end;
  178.   except
  179.     on E:Exception do
  180.       writeln(E.Message);
  181.   end;
  182.   readln;
  183. end.
  184.